import axios from 'axios'

import store from '@/store'

import router from '@/router'

import list from '@/config/requestWhiteList'

//创建一个Axios实例
const http = axios.create({
    baseURL: process.env.VUE_APP_BASE_API,
    timeout: 1000 * 60
})

//配置请求拦截
http.interceptors.request.use(
    config => {
        //放行白名单
        for (const index in list) {
            if(config.url.indexOf(list[index]) == 0){
                return config;
            }
        }

        //获取缓存的用户信息
        const userStore = store.state.user;
        if(userStore && userStore.token){
            //设置携带的Token
            config.headers.Authorization = `Bearer ${userStore.token}`;
            //放行请求
            return config;
        }else{
            router.push('/login');
            return false;
        }
    },
    error => {
        return Promise.reject(error);
    }
)

//配置响应拦截
http.interceptors.response.use(
    //响应成功直接获取Data对象
    success => {
        return success.data
    },
    //响应失败,阻止程序运行
    error => {
        const status = error.response.status;
        if(status == 401){
            router.push('/login');
        }
        return Promise.reject(error.response.data)
    }
)


/**
 * requestUrl = 请求的地址
 * requestType = 请求的类型
 * requestData = 请求的参数
 */
export default (requestUrl, requestType, requestData) => {
    return http({
        //请求的地址
        url: requestUrl,
        //请求的类型
        method: requestType,
        //请求的参数:如果是get请求就使用[params]作为属性,如果是post请求就使用[data]作为属性
        [requestType.toLowerCase() === 'get' ? 'params' : 'data']: requestData
    })
}